package trocabi;

/* Salut sdmqsldkmq*/

import trocabi.DAO.DAOArticle;
import trocabi.DAO.DAODepositaire;
import trocabi.Socle.DBManager;
import trocabi.view.Accueil;
import trocabi.view.GuiDeposerArticles;
import trocabi.view.GuiFacturation;
import trocabi.view.GuiSaisieArticle;
import trocabi.view.GuiSaisieDepositaire;
import trocabi.view.GuiInventaire;
import trocabi.view.GuiDepositaires;
import trocabi.view.GuiVente;
import trocabi.Socle.TechnicalException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class TROCABI extends JFrame {
    // Définition des constantes
    // Constantes "Frames"
    public static final int FRAME_DEPOT = 0;
    public static final int FRAME_FACTURATION = 1;
    public static final int FRAME_INVENTAIRE = 2;
    public static final int FRAME_VENTE = 3;
    // Constantes "Type de fenêtre"
    public static final int ERREUR = 0;
    public static final int STOP = 1;
    public static final int INFORMATION = 2;
    public static final int SUCCES = 3;
    // Constantes "Type du modèle"
    public static final int DEPOSITAIRE = 0;
    public static final int ARTICLE = 1;
    // Constantes "Champs"
    public static final int TEL = 0;
    public static final int CP = 1;
    public static final int NUM_CARTE_ID = 2;
    public static final int CODE_BARRE = 3;
    public static final int QUANTITE = 4;
    // Constantes "Action"
    public static final char AJOUTER = 'A';
    public static final char ANNULER = 'A';
    public static final char BRADERIE = 'B';
    public static final char DEPOSER1AUTRE = 'D';
    public static final char DEPOT = 'D';
    public static final char FACTURATION = 'F';
    public static final char IMPRIMER_CAHIER = 'C';
    public static final char IMPRIMER1ETIQUETTE = 'e';
    public static final char IMPRIMER1FACTURE = 'F';
    public static final char IMPRIMER1RECU = 'r';
    public static final char IMPRIMER_TTES_ETIQUETTES = 'E';
    public static final char INVENTAIRE = 'I';
    public static final char MODIFIER = 'M';
    public static final char MODIFIER_ETAT1 = '1';
    public static final char MODIFIER_ETAT2 = '2';
    public static final char MODIFIER_ETAT3 = '3';
    public static final char MODIFIER_ETAT4 = '4';
    public static final char NOUVEAU = 'N';
    public static final char RECHERCHE = 'R';
    public static final char SUPPRIMER = 'S';
    public static final char TERMINER = 'T';
    public static final char VALIDER = 'V';
    public static final char VALIDER_VENTE = 'v';
    public static final char VENTE = 'V';
    // Définition des variables
    // Fenêtres
    private static Accueil fAccueil;
    private static GuiDeposerArticles guiDeposerArticle;
    private static GuiFacturation guiFacturation;
    private static GuiSaisieArticle guiSaisieArticle;
    private static GuiSaisieDepositaire guiSaisieDepositaire;
    private static GuiInventaire fInventaire;
    private static GuiDepositaires guiDepositaires;
    private static GuiVente fVente;
    // Objets d'accès à la DAO
    private static DAODepositaire Acces_DAODepositaire = DAODepositaire.getInstance();
    private static DAOArticle             daoArticle = DAOArticle.getInstance(); // TODO: degager ce static!
    // Formats
    public static SimpleDateFormat sdfFormat_Date;
    public static DecimalFormat dfFormat_Prix = new DecimalFormat("#.00");
    private static String sFormat_Date = "dd/MM/yyyy";
    private static String sFormat_Num_CarteID = "000000000000";
    private static String sFormat_Code_Postal = "00000";
    private static String sFormat_Num_Tel = "0000000000";
    private static String sFormat_Code_Barre = "0000000000";
    private static int iQuantiteMax = 999;

    
    private static String codeCaisse="01";
    
    
    public static double formatageDoublePositif(String sDouble, int iNbDecimales) {
        double dDouble;
        try {
            dDouble = Double.parseDouble(sDouble);
            BigDecimal bdBigDec = new BigDecimal(dDouble);
            bdBigDec = bdBigDec.setScale(iNbDecimales, BigDecimal.ROUND_HALF_UP);
            dDouble = bdBigDec.doubleValue();
            if (dDouble <= 0) {
                return -1;
            }
        } catch (Exception ex) {
            return -1;
        }
        return dDouble;
    }

    public static int formatageIntPositif(int ChampSource, String sInt) {
        int iInt, i;
        switch (ChampSource) {
            case TEL:
                if (sInt.equals("")) {
                    return 0;
                } else if (sInt.length() != sFormat_Num_Tel.length() || sInt.charAt(0) != '0') {
                    return -1;
                }
                break;
            case CP:
                if (sInt.length() != sFormat_Code_Postal.length() || sInt.charAt(4) != '0') {
                    return -1;
                }
                break;
            case NUM_CARTE_ID:
                if (sInt.length() != sFormat_Num_CarteID.length()) {
                    return -1;
                }
                for (i = 0; i < sInt.length(); i++) {
                    if (!Character.isDigit(sInt.charAt(i))) {
                        return -1;
                    }
                }
                return 0;
            case CODE_BARRE:
                if (sInt.length() != sFormat_Code_Barre.length()) {
                    return -1;
                }
                for (i = 0; i < sInt.length(); i++) {
                    if (!Character.isDigit(sInt.charAt(i))) {
                        return -1;
                    }
                }
                return 0;
            case QUANTITE:
                if (sInt.equals("")) {
                    return 1;
                } else if (sInt.length() < 1 || sInt.length() > String.valueOf(iQuantiteMax).length()) {
                    return -1;
                }
                break;
        }
        try {
            iInt = Integer.parseInt(sInt);
            if (iInt < 0 || (ChampSource == QUANTITE && (iInt == 0 || iInt > iQuantiteMax))) {
                return -1;
            }
        } catch (Exception ex) {
            return -1;
        }
        return iInt;
    }

    public static Date formatageDate(String sDate) {
        Date dtDate;
        if (sDate.length() == 8) {
            try {
                Integer.parseInt(sDate);
                sDate = sDate.substring(0, 2) + '/' + sDate.substring(2, 4) + '/' + sDate.substring(4, 8);
                dtDate = sdfFormat_Date.parse(sDate);
            } catch (Exception ex) {
                return null;
            }
        } else if (sDate.length() == 10) {
            try {
                if ((sDate.charAt(2) != ':' && sDate.charAt(2) != '/' && sDate.charAt(2) != '-' && sDate.charAt(2) != '.') || (sDate.charAt(5) != ':' && sDate.charAt(5) != '/' && sDate.charAt(5) != '-' && sDate.charAt(5) != '.') || (sDate.charAt(5) != sDate.charAt(2))) {
                    return null;
                }
                sDate = sDate.substring(0, 2) + sDate.substring(3, 5) + sDate.substring(6, 10);
                Integer.parseInt(sDate);
                sDate = sDate.substring(0, 2) + '/' + sDate.substring(2, 4) + '/' + sDate.substring(4, 8);
                dtDate = sdfFormat_Date.parse(sDate);
            } catch (Exception ex) {
                return null;
            }
        } else {
            return null;
        }
        if (dtDate.after(new Date())) {
            return null;
        }
        return dtDate;
    }

    public static String formatageString(String sPhrase) {
        if (sPhrase == null || sPhrase.isEmpty()) {
            return null;
        }
        int i;
        sPhrase = sPhrase.substring(0, 1).toUpperCase() + sPhrase.substring(1, sPhrase.length());
        for (i = 0; i < sPhrase.length() - 1; i++) {
            if (!Character.isLetter(sPhrase.charAt(i))) {
                sPhrase = sPhrase.substring(0, i + 1) + sPhrase.substring(i + 1, i + 2).toUpperCase() + sPhrase.substring(i + 2, sPhrase.length());
            }
        }
        return sPhrase;
    }

    public static void fenetreExterne(int type, String message) {
        switch (type) {
            case ERREUR:
                JOptionPane.showOptionDialog(null, message, "Erreur", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, new ImageIcon(".\\Ressources\\Error.png"), null, null);
                break;
            case STOP:
                JOptionPane.showOptionDialog(null, message, "Attention", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, new ImageIcon(".\\Ressources\\Stop.png"), null, null);
                break;
            case INFORMATION:
                JOptionPane.showOptionDialog(null, message, "Information", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, new ImageIcon(".\\Ressources\\Information.png"), null, null);
                break;
            case SUCCES:
                JOptionPane.showOptionDialog(null, message, "Félicitation", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, new ImageIcon(".\\Ressources\\Check.png"), null, null);
                break;
        }
    }

   

   
/*
    public static void informationsArticle(char action, String sInformations_Article[], Article atArticle, Depositaire dpDepositaire) {
        // action
        switch (action) {
            case ANNULER:
                guiSaisieArticle.setVisible(false);
                break;
            case DEPOSER1AUTRE:
            case TERMINER:
                // vérification champs "Date de dépôt", "Prix d'achat", "Quantité"
                Date dtDateDepot = formatageDate(sInformations_Article[2]);
                double dPrixAchat = formatageDoublePositif(sInformations_Article[3], 2);
                int iQuantite = formatageIntPositif(QUANTITE, sInformations_Article[4]);
                if (dtDateDepot == null || dPrixAchat == -1 || iQuantite == -1) {
                    fenetreExterne(ERREUR, "Le champ " + (dtDateDepot == null ? "\"Date de dépôt\"" : dPrixAchat == -1 ? "\"Prix d'achat\"" : "\"Quantité\"") + " ne respecte pas le format de donnée attendu" + (dtDateDepot == null ? " ou ne contient pas une date valide" : "") + ".\nCi-dessous les formats attendus :\n     - Date de dépôt : JJMMAAAA ou JJ/MM/AAAA ou JJ-MM-AAAA ou JJ.MM.AAAA ou JJ:MM:AAAA\n     (Attention, une date postérieure à la date actuelle n'est pas une date valide)\n     - Prix d'achat : un nombre décimal strictement positif (la séparation de la partie entière et de la partie décimale est faites par un '.')\n     - Quantité : un nombre entier strictement positif (Ce champ peut ne pas être rempli, la valeur par défaut est 1)\n\nLes '#' correspondent à un chiffre (0 à 9)");
                    return;
                }
                java.sql.Date sqlDate = new java.sql.Date(dtDateDepot.getTime());
                String sDate = sqlDate.toString();
                if (sInformations_Article[5].length() >= 255) {
                    sInformations_Article[5] = sInformations_Article[5].substring(0, 254);
                }
                // mise en forme pour affichage champ "Description"
                int i,
                 iCaracteresRestant = sInformations_Article[5].length();
                String[] Description = {"", "", "", "", ""};
                for (i = 0; i < sInformations_Article[5].length(); i += 70) {
                    Description[i / 70] = sInformations_Article[5].substring(i, i + (iCaracteresRestant > 70 ? 70 : iCaracteresRestant));
                    iCaracteresRestant -= 70;
                }

                if (atArticle != null) { // maj d'un article
                    // modification article
                    // atArticle = new Article(atArticle.iQuel_Code_Article(), atArticle.iQuel_Numero_Depositaire(), sInformations_Article[5], sInformations_Article[7], sInformations_Article[6], sInformations_Article[8], sInformations_Article[9], sInformations_Article[1], atArticle.sQuelle_Date_Changement_Etat_Article(), atArticle.sQuel_Commentaire_Article(), atArticle.sQuelle_Caisse_Article(), sDate, Double.valueOf(sInformations_Article[3]), atArticle.dQuelle_Marge_Article());
                    // Liste des champs à modifier
                    ArrayList<String[]> listMAJInfos_Article = new <String[]> ArrayList();
                    String[] stabMAJ_Articles;
                    // MAJ Date de dépôt
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_DATE_DEPOT;
                    // stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuelle_Date_Depot_Article();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Type
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_TYPE;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.getCodeType();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Aspect
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_ASPECT;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.getCodeAspect();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Pour
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_POUR;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.getCodeGenre();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Couleur
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_COULEUR;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.getCouleur();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Description
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_DESCRIPTION;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.getDescription();
                    listMAJInfos_Article.add(stabMAJ_Articles);
                    // MAJ Prix d'achat
                    stabMAJ_Articles = new String[2];
                    stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_PRIX_ACHAT;
                    stabMAJ_Articles[DAOArticle.iVALEUR] = Double.toString(atArticle.getPrixAchat());
                    listMAJInfos_Article.add(stabMAJ_Articles);

                    // Liste des conditions de modification
                    ArrayList<String[]> listMAJConditions_Articles = new <String[]> ArrayList();
                    String[] stabMAJ_Conditions_Articles;
                    // Condition sur le numéro d'article
                    stabMAJ_Conditions_Articles = new String[3];
                    stabMAJ_Conditions_Articles[DAOArticle.iID_DB] = DAOArticle.FD_ID;
                    stabMAJ_Conditions_Articles[DAOArticle.iVALEUR] = Long.toString(atArticle.getId());
                    stabMAJ_Conditions_Articles[DAOArticle.iMODE_COMPARAISON] = DAOArticle.sEGAL_STRICT;
                    listMAJConditions_Articles.add(stabMAJ_Conditions_Articles);
            try {
                daoArticle.bUpdate(listMAJInfos_Article, listMAJConditions_Articles);
                // fDepot.getJTableModele().Remove(fDepot.getJTable().getSelectedRow(), fDepot.getJTable());
                // fDepot.getJTableModele().Add(atArticle);
            } catch (TechnicalException ex) {
                Logger.getLogger(TROCABI.class.getName()).log(Level.SEVERE, null, ex);
                fenetreExterne(ERREUR, "Erreur inattendue lors de la mise à jour de l'article.");
            }
                } else { // création article // vérification champs "Date de dépôt", "Prix d'achat", "Quantité"
                    
                     Date dtDateDepot = formatageDate(sInformations_Article[2]);
                     double dPrixAchat = formatageDoublePositif(sInformations_Article[3], 2);
                     int iQuantite = formatageIntPositif(QUANTITE, sInformations_Article[4]);
                     if (dtDateDepot == null || dPrixAchat == -1 || iQuantite == -1) {
                     fenetreExterne(ERREUR, "Le champ " + (dtDateDepot == null ? "\"Date de dépôt\"" : dPrixAchat == -1 ? "\"Prix d'achat\"" : "\"Quantité\"") + " ne respecte pas le format de donnée attendu" + (dtDateDepot == null ? " ou ne contient pas une date valide" : "") + ".\nCi-dessous les formats attendus :\n     - Date de dépôt : JJMMAAAA ou JJ/MM/AAAA ou JJ-MM-AAAA ou JJ.MM.AAAA ou JJ:MM:AAAA\n     (Attention, une date postérieure à la date actuelle n'est pas une date valide)\n     - Prix d'achat : un nombre décimal strictement positif (la séparation de la partie entière et de la partie décimale est faites par un '.')\n     - Quantité : un nombre entier strictement positif (Ce champ peut ne pas être rempli, la valeur par défaut est 1)\n\nLes '#' correspondent à un chiffre (0 à 9)");
                     return;
                     }
                     java.sql.Date sqlDate = new java.sql.Date(dtDateDepot.getTime());
                     String sDate = sqlDate.toString();
                     if (sInformations_Article[5].length() >= 255) {
                     sInformations_Article[5] = sInformations_Article[5].substring(0, 254);
                     }
                     // mise en forme pour affichage champ "Description"
                     int i, iCaracteresRestant = sInformations_Article[5].length();
                     String[] Description = {"", "", "", "", ""};
                     for (i = 0; i < sInformations_Article[5].length(); i += 70) {
                     Description[i / 70] = sInformations_Article[5].substring(i, i + (iCaracteresRestant > 70 ? 70 : iCaracteresRestant));
                     iCaracteresRestant -= 70;
                     }
                    
                     if (atArticle != null) {
                     // modification article
                     atArticle = new Article(atArticle.iQuel_Code_Article(), atArticle.iQuel_Numero_Depositaire(), sInformations_Article[5], sInformations_Article[7], sInformations_Article[6], sInformations_Article[8], sInformations_Article[9], sInformations_Article[1], atArticle.sQuelle_Date_Changement_Etat_Article(), atArticle.sQuel_Commentaire_Article(), atArticle.sQuelle_Caisse_Article(), sDate, Double.valueOf(sInformations_Article[3]), atArticle.dQuelle_Marge_Article());
                     // Liste des champs à modifier
                     ArrayList<String[]> listMAJInfos_Article = new <String[]> ArrayList();
                     String[] stabMAJ_Articles;
                     // MAJ Date de dépôt
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_DATE_DEPOT;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuelle_Date_Depot_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Type
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_TYPE;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuel_Type_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Aspect
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_ASPECT;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuel_Aspect_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Pour
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_POUR;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuel_Pour_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Couleur
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_COULEUR;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuelle_Couleur_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Description
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_DESCRIPTION;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = atArticle.sQuelle_Description_Article();
                     listMAJInfos_Article.add(stabMAJ_Articles);
                     // MAJ Prix d'achat
                     stabMAJ_Articles = new String[2];
                     stabMAJ_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_PRIX_ACHAT;
                     stabMAJ_Articles[DAOArticle.iVALEUR] = Double.toString(atArticle.dQuel_Prix_Achat_Article());
                     listMAJInfos_Article.add(stabMAJ_Articles);

                     // Liste des conditions de modification
                     ArrayList<String[]> listMAJConditions_Articles = new <String[]> ArrayList();
                     String[] stabMAJ_Conditions_Articles;
                     // Condition sur le numéro d'article
                     stabMAJ_Conditions_Articles = new String[3];
                     stabMAJ_Conditions_Articles[DAOArticle.iID_DB] = DAOArticle.sID_DB_CODE_ARTICLE;
                     stabMAJ_Conditions_Articles[DAOArticle.iVALEUR] = Long.toString(atArticle.iQuel_Code_Article());
                     stabMAJ_Conditions_Articles[DAOArticle.iMODE_COMPARAISON] = DAOArticle.sEGAL_STRICT;
                     listMAJConditions_Articles.add(stabMAJ_Conditions_Articles);

                     if (!Acces_DAOArticle.bUpdate(listMAJInfos_Article, listMAJConditions_Articles)) {
                     fenetreExterne(ERREUR, "Erreur inattendue lors de la mise à jour de l'article.");
                     return;
                     }
                     fDepot.getJTableModele().Remove(fDepot.getJTable().getSelectedRow(), fDepot.getJTable());
                     fDepot.getJTableModele().Add(atArticle);
                     } 
                     else
                     {
                    
                     for (i = 0; i < iQuantite; i++) {
                     long Reference = Acces_DAOArticle.iNumero();
                     if (Reference == -1) {
                     fenetreExterne(ERREUR, "Problème lors de la génération automatique du numéro d'article.\nNombre d'exemplaires de l'article déjà créés : " + i);
                     return;
                     } else {
                     atArticle = new Article(Reference, dpDepositaire.iQuel_Numero_Depositaire(), sInformations_Article[5], sInformations_Article[7], sInformations_Article[6], sInformations_Article[8], sInformations_Article[9], sInformations_Article[1], null, "", "1", sDate, Double.valueOf(sInformations_Article[3]), 0.1);
                     }
                     if (!Acces_DAOArticle.bCreate(atArticle)) {
                     fenetreExterne(ERREUR, "Erreur inattendue lors de la création de l'article.\nNombre d'exemplaires de l'article déjà créés : " + i);
                     return;
                     }
                     fDepot.getJTableModele().Add(atArticle); // maj de la liste des articles
                     }
                     }
                     }

                     fenetreExterne(SUCCES, ((iQuantite != 1) ? "Les articles ont été créés/modifiés" : "L'article a été créé/modifié") + "avec succès.\nCi-dessous les informations" + ((iQuantite != 1) ? "les" : "le") + "concernant :\n     - Situation :   " + sInformations_Article[1] + "\n     - Date de dépôt :   " + sInformations_Article[2] + "\n     - Prix d'achat :   " + sInformations_Article[3] + "€\n     - Quantité :   " + iQuantite + "\n     - Type :   " + sInformations_Article[6] + "\n     - Aspect :   " + sInformations_Article[7] + "\n     - Pour :   " + sInformations_Article[8] + "\n     - Couleur :   " + sInformations_Article[9] + "\n     - Description :\n" + Description[0] + (Description[1].equals("") ? "" : "\n" + Description[1]) + (Description[2].equals("") ? "" : "\n" + Description[2]) + (Description[3].equals("") ? "" : "\n" + Description[3]) + (Description[4].equals("") ? "" : "\n" + Description[4]));
                     if (action == TERMINER) {
                     fInformations_article.setVisible(false);
                     } else {
                     fInformations_article.setDefault();
                     }
                     
                    break;
                }
        }
    }

  */
  
    public static void accueil(char action) {
        guiDeposerArticle.setVisible(false);
        guiFacturation.setVisible(false);
        guiSaisieArticle.setVisible(false);
        guiSaisieDepositaire.setVisible(false);
        fInventaire.setVisible(false);
        guiDepositaires.setVisible(false);
        fVente.setVisible(false);
        switch (action) {
            case DEPOT:
                // sélection/création du dépositaire --> informations sur le dépositaire --> gestion des dépots d'article (informations article si ajout d'un article)
                guiDepositaires.setVisible(true);
                guiDepositaires.setDefault();
                guiDepositaires.setFacturation(false);
                break;
            case FACTURATION:
                // sélection du dépositaire (pas de création possible) --> listing des ventes
                guiDepositaires.setVisible(true);
                guiDepositaires.setDefault();
                guiDepositaires.setFacturation(true);
                break;
            case INVENTAIRE:
                fInventaire.setVisible(true);
                fInventaire.setDefault();
                break;
            case VENTE:
                fVente.setVisible(true);
                fVente.setDefault();
                break;
        }
    }

    public static void main(String[] args) throws Exception  {
        
        sdfFormat_Date = new SimpleDateFormat(sFormat_Date);
        sdfFormat_Date.setLenient(false);

        fAccueil = new Accueil();
       
        guiDeposerArticle = new GuiDeposerArticles();
        guiFacturation = new GuiFacturation();
        guiSaisieArticle = new GuiSaisieArticle();
        guiSaisieArticle.setDepotArticle(guiDeposerArticle);
        guiDeposerArticle.setGuiSaisieArticle(guiSaisieArticle);
        guiSaisieDepositaire = new GuiSaisieDepositaire();
        guiSaisieDepositaire.setGuiDeposerArticles(guiDeposerArticle);
        
        fInventaire = new GuiInventaire();
        guiDepositaires = new GuiDepositaires();
        guiDepositaires.setGuiSaisieDepositaire(guiSaisieDepositaire);
        guiDepositaires.setGuiFacturation(guiFacturation);
        fVente = new GuiVente();
        // waiting for end of initialization (prevent null pointer)
        
        try {
            DBManager.getConnection(); // connect to database 
        } catch (TechnicalException ex) {
            Logger.getLogger(TROCABI.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(1); // exit program
        }
        fAccueil.setVisible(true); // show first Dialog
    }
    
    public String getCodeCaisse() {
        return codeCaisse;
    }
}
